Computer systems and related technology affect many aspects of society. Indeed, the computer system's ability to process information has transformed the way we live and work. Computer systems now commonly perform a host of tasks (e.g., word processing, scheduling, accounting, etc.) that prior to the advent of the computer system were performed manually. More recently, computer systems have been coupled to one another and to other electronic devices to form both wired and wireless computer networks over which the computer systems and other electronic devices can transfer electronic data. Accordingly, the performance of many computing tasks are distributed across a number of different computer systems and/or a number of different computing environments.
Many computing systems are implemented as component-based systems. Each component is a routine or program that executes on the central computing system. Accordingly, the designer of each component designs the underlying code for each component that is executed in operation. The component designer typically also defines error types for the component and one or more error handlers that may resolve the error.
The error handlers for each component, however, generally cannot be shared with other components of the system. This requires component designers to implement separate error resolution mechanisms for each individual component of the system, which can lead to duplication of resources.
In addition, new types of errors may later be identified by a component designer. In order to implement new error handlers or to modify existing error handlers for the new error types, the designer generally must modify the underlying component code, which may be a difficult task or even impossible if the component does not expose an extensibility mechanism. Further, for systems that are extensible, new error types and possibly new ways to deal with errors may exist that are unknown to a system designer.